package com.tools.pojo.data;


import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;

import java.util.List;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class PatientDTO {

    /**
     * 患者ID
     */
    @NotBlank(message = "患者ID不能为空")
    @JsonProperty("patn_id")
    private String patnId;

    /**
     * 患者姓名
     */
    @NotBlank(message = "患者姓名不能为空")
    @JsonProperty("patn_name")
    private String patnName;

    /**
     * 性别 (1:男, 2:女)
     */
    @NotBlank(message = "性别不能为空")
    @JsonProperty("gend")
    private String gend;

    /**
     * 出生日期
     */
    @NotBlank(message = "出生日期不能为空")
    @JsonProperty("brdy")
    private String brdy;

    /**
     * 统筹区
     */
    @JsonProperty("poolarea")
    private String poolarea;

    /**
     * 当前诊疗ID
     */
    @JsonProperty("curr_mdtrt_id")
    private String currMdtrtId;

    /**
     * 就诊记录列表
     */
    @Valid
    @JsonProperty("fsi_encounter_dtos")
    private List<FsiEncounterDTO> fsiEncounterDtos;

    /**
     * 历史数据
     */
    @JsonProperty("fsi_his_data_dto")
    private Object fsiHisDataDto;

    // 计算属性
    /**
     * 获取主要就诊记录（第一条）
     */
    public FsiEncounterDTO getPrimaryEncounter() {
        if (fsiEncounterDtos != null && !fsiEncounterDtos.isEmpty()) {
            return fsiEncounterDtos.get(0);
        }
        return null;
    }

    /**
     * 获取主要诊断
     */
    public String getMainDiagnosis() {
        FsiEncounterDTO encounter = getPrimaryEncounter();
        return encounter != null ? encounter.getDscgMainDiseName() : null;
    }

    /**
     * 获取性别文本
     */
    public String getGenderText() {
        return switch (gend) {
            case "1" -> "男";
            case "2" -> "女";
            default -> "未知";
        };
    }
}